/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tortues;

import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Random;
import logo.FeuilleDessin;

/**
 *
 * @author p0806856
 */
public class TortueAmelioree extends Tortue {

    public static final int DISTANCE_BONJOUR = 15;
    private String nomTortue = "ToTo";
    private ArrayList<TortueAmelioree> listeTortuesConnues;
    private Boolean possesseurBalle = false;
    public static Random ramdomTortueAmelioree = null;
    private static final int distanceUnCoupTortue = 20;
    private int numEquipe = 0;
    public static int NB_EQUIPE = 2;

    public TortueAmelioree() {
        if (ramdomTortueAmelioree == null) {
            ramdomTortueAmelioree = new Random();
        }
    }

    public TortueAmelioree(String nomTortueIn) {
        super();
        if (ramdomTortueAmelioree == null) {
            ramdomTortueAmelioree = new Random();
        }
        nomTortue = nomTortueIn;
        listeTortuesConnues = new ArrayList<>();
        this.leverCrayon();
    }

    public String getNomTortue() {
        return nomTortue;
    }

    public int getNumEquipe() {
        return numEquipe;
    }

    public void setNumEquipe(int numEquipe) {
        this.numEquipe = numEquipe;
    }

    public void setPossesseurBalle() {
        this.possesseurBalle = true;
    }

    public void setNonPossesseurBalle() {
        this.possesseurBalle = false;
    }

    public Boolean getPossesseurBalle() {
        return possesseurBalle;
    }

    public void afficheNomTortue() {
        if (nomTortue == null) {
            nomTortue = "J'ai perdu mon nom";
        }
        System.out.println("Nom de la tortue : " + nomTortue);
    }

    public void afficheNomAutreTortue(TortueAmelioree tortue) {
        if (tortue != null) {
            System.out.println("Bonjour " + tortue.getNomTortue());
        }
    }

    public void addTortue(TortueAmelioree nouvelleConnaissance) {
        if (listeTortuesConnues == null) {
            listeTortuesConnues = new ArrayList<>();
        }
        if (!this.equals(nouvelleConnaissance)) {
            this.listeTortuesConnues.add(nouvelleConnaissance);
        }
    }

    public void addArrayTortue(ArrayList<TortueAmelioree> mArray) {
        this.listeTortuesConnues.addAll(mArray);
        checkError();

    }

    /**
     * Enlève toutes les instances de la tortue courante dans son propre tableau
     */
    private void checkError() {
        for (int i = 0; i < listeTortuesConnues.size(); i++) {
            if (listeTortuesConnues.get(i).equals(this)) {
                listeTortuesConnues.remove(i);
                i--;
            }
        }
    }

    public void removeTortue(TortueAmelioree tortueAEnlever) {
        if (listeTortuesConnues != null) {
            this.listeTortuesConnues.remove(tortueAEnlever);
        }
    }

    public double getDistance(TortueAmelioree autreTortue) {
        double ret = 0;
        if (autreTortue != null) {
            ret = Math.sqrt(Math.pow(this.x - autreTortue.x, 2) + Math.pow(this.y - autreTortue.y, 2));
        }
        return ret;
    }

    public void proxiTortue() {
        if (listeTortuesConnues != null && listeTortuesConnues.size() > 0) {
            for (int i = 0; i < listeTortuesConnues.size(); i++) {
                double dist = getDistance(listeTortuesConnues.get(i));
                if (dist < DISTANCE_BONJOUR) {
                    afficheNomAutreTortue(listeTortuesConnues.get(i));
                    listeTortuesConnues.get(i).avancerPush(DISTANCE_BONJOUR);
                }
            }
        }
    }

    @Override
    public void avancer(int dist) {
        super.avancer(dist);
        proxiTortue();
       /* if (getPossesseurBalle()) {
            TortueAmelioree t = listeTortuesConnues.get(ramdomTortueAmelioree.nextInt(listeTortuesConnues.size()));
            if (t.getNumEquipe() == getNumEquipe()) {
                t.setPossesseurBalle();
                setNonPossesseurBalle();
                TORTUE_BALLE.setPosition(t.x, t.y);
            }else{
                System.out.println("Tortue qui n'est pas de mon équipe");
                TORTUE_BALLE.setPosition(x, y);
            }
        }*/
    }

    private void avancerPush(int dist) {
        super.avancer(dist);
    }

    public void bouger(Random mRandom) {
        int nextValue = mRandom.nextInt(distanceUnCoupTortue);
        int newX = (int) Math.round(x + nextValue * Math.cos(ratioDegRad * dir));
        int newY = (int) Math.round(y + nextValue * Math.sin(ratioDegRad * dir));

        if (newX > FeuilleDessin.DIMX || newY > FeuilleDessin.DIMX || newX < 0 || newY < 0) {
            droite(mRandom.nextInt(180));
            bouger(mRandom);
        } else {
            avancer(nextValue);
        }
    }

    @Override
    public void drawTurtle(Graphics graph) {
        super.drawTurtle(graph);
        graph.setColor(Color.red);
        graph.drawString(getNomTortue(), x + 5, y);
    }
}
